窗口篇(一)
01 数据处理前的分流
窗口在处理数据前,会对数据做分流,有两种控制流的方式。
也就是按照原始数据流中的某个key进行分类,拥有同一个key值的数据流将为进入同一个window,多个窗口并行的逻辑流
02 窗口函数的准备
对于每个window必备的是触发器Trigger和一个附加在window上的函数
- ProcessWindowFunction
- ReduceFunction
- AggregateFunction
- FoldFunction
用于实现window中对数据流的操作.
在对数据流做处理前,需要先预设一些窗口的配置,先看一下窗口的一些类型:
1. 划分
- time 根据时间划分
时间类型:
EventTime 数据本身携带的时间
ProcessingTime 处理时间 - count 根据数据量划分窗口
2. 属性
- size=interval 无重叠数据,可理解为翻滚窗口,
- size>interval 有重叠数据,可理解为滑动窗口
于是一共有这几个窗口类型
- 无重叠时间窗口
- 有重叠时间窗口
- 有重叠数据窗口
- 无重叠数据窗口
实际场景中用的较多的还是时间窗口,以时间窗口为例。
3. 时间窗口
声明使用的窗口时间类型.
选择完时间类型之后,我们优先挑选最复杂的一种情况来说明时间戳和水位线的工作机制,如果选择了EventTime,需要指定数据流中的时间戳。
时间戳分配与生成水印密切相关,水印告诉系统事件时间的进展。决定水位线的高度。
4. 水位线Watermark
通常在处理EventTime事件时间的时候使用,流式传输程序需要相应地设置时间特性。
数据流的到达顺序我们无法保证的情况下,需要对迟到的数据进行处理,Periodic水位线便是配置这个特性。
AssignerWithPeriodicWatermarks分配时间戳并定期生成水印
03 窗口函数
窗口函数是触发器在确认窗口数据到达完毕后,执行的函数。
- AggerateFunction/ReduceFunction/FoldFunction/…
此类为数据计算函数,适用于仅计算,无需做时间窗口的情况。
AggerateFunction为用户自定义函数,可以按照个人需求做各类统计。
- WindowFunction/ProcessWindowFunction/…
此类为做窗口函数,适用于无需计算只做时间窗口统计的情况。(ps.貌似很少有这样的情况猴)